package main

import (
	"fmt"
	"github.com/garyburd/redigo/redis"
)

// 链接池
var pool *redis.Pool
func init() {
	pool = &redis.Pool{
		MaxIdle: 8,
		MaxActive: 0,
		IdleTimeout: 100,
		Dial: func() (redis.Conn, error) {
			return redis.Dial("tcp", "localhost:6379")
		},
	}
}

func main() {
	//	链接池的使用
	conn := pool.Get()
	//关闭所有链接
	defer pool.Close()
	defer conn.Close()

	//	通过go 想 redis 写入数据和读取数据
	//	1. 链接到redis
	//conn, err := redis.Dial("tcp", "127.0.0.1:6379")
	//if err != nil {
	//	fmt.Println("redis.Dial err=", err)
	//	return
	//}
	//defer conn.Close()

	//	2.通过go 向redis写入数据 string 【key-value】
	_, err := conn.Do("Set", "name", "jerry")
	if err != nil {
		fmt.Println("set err=", err)
		return
	}

	name, err := redis.String(conn.Do("Get", "name"))
	if err != nil {
		fmt.Println("Get err=", err)
		return
	}
	fmt.Println("Get name=", name)

	//	3.通过 go 向redis写入 hash 类型
	_, err = conn.Do("HSet", "user1", "name", "aaa")
	if err != nil {
		fmt.Println("hset err=", err)
		return
	}

	_, err = conn.Do("HSet", "user1", "age", 18)
	if err != nil {
		fmt.Println("hset err=", err)
		return
	}

	user1name, err := redis.String(conn.Do("HGet", "user1", "name"))
	if err != nil {
		fmt.Println("hGet err=", err)
		return
	}
	fmt.Println("hGet name=", user1name)

	// 批量操作
	_, err = conn.Do("HMSet", "user2", "name", "bbb", "age", 20)
	if err != nil {
		fmt.Println("HMSet err=", err)
		return
	}

	userInfo, err := redis.Strings(conn.Do("HMGet", "user2", "name", "age"))
	if err != nil {
		fmt.Println("HMGet err=", err)
		return
	}
	fmt.Println("Get name=", userInfo)

	_, err = conn.Do("expire", "name1", 10)
	if err != nil {
		fmt.Println("expire err=", err)
	}
}